package edu.biwu;

import jakarta.servlet.*;
import java.io.IOException;

/**
 * Servlet的生命周期
 *  1.首次访问ServletDemo02，会执行一下操作
 *     a.Tomcat底层会开启线程处理当前请求
 *     b.利用反射技术创建ServletDemo02对象（会调用ServletDemo02的空参构造方法）
 *     c.利用ServletDemo02对象调用init方法做初始化操作
 *     d.调用service方法处理用户的请求
 *  2.从第二次之后的访问，会执行如下操作
 *     a.从第二次之后的访问，Tomcat依然会启动一个线程去处理当前请求
 *     b.此时不在利用反射技术创新ServletDemo02的对象，也不再会调用init方法初始化
 *       只会使用第一次创新的ServletDemo02对象调用service方法
 *  3.当tomcat被关闭的时候，tomcat会调用destroy()方法来销毁ServletDemo02
 *  注意：
 *      1.每次请求都会使用同一个Servlet对象
 *      2.每次请求Servlet，Tomcat都会启动一个线程
 *      3.Tomcat使用多项成处理用户请求，而这些线程使用的都是同一个Servlet对象
 *        有可能产生多线程操作共享数据的安全性问题，不推荐再Servlet中使用成员变量
 */

public class ServletDemo02 implements Servlet {

    public ServletDemo02(){
        System.out.println("ServletDemo02的构造方法被调用..." + this);
    }
    @Override
    public void init(ServletConfig config) throws ServletException {
        System.out.println("ServletDemo02的构造方法被调用..." + this);
    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    @Override
    public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
        System.out.println("Servlet方法被调用..." + this);
    }

    @Override
    public String getServletInfo() {
        return "";
    }

    @Override
    public void destroy() {
        System.out.println("Servlet方法被调用..." + this);
    }
}
